@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo =============================================
echo      CodeIdea 高级打包脚本
echo =============================================

rem 设置颜色
color 0A

rem 检测系统架构
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    set ARCH=64位
) else (
    set ARCH=32位
)

rem 检查Python是否安装
python --version >nul 2>&1
if errorlevel 1 (
    echo 错误：未找到Python，请先安装Python 3.7或更高版本
    echo 建议下载地址：https://www.python.org/downloads/
    pause
    exit /b 1
)

rem 获取Python版本
for /f "tokens=2" %%i in ('python --version 2^>^&1') do set PYTHON_VERSION=%%i

echo 检测到：Python !PYTHON_VERSION! (!ARCH!)
echo.

rem 检查PyInstaller是否安装
python -c "import PyInstaller" 2>nul
if errorlevel 1 (
    echo 正在安装PyInstaller...
    pip install pyinstaller --upgrade
    if errorlevel 1 (
        echo 错误：PyInstaller安装失败
        echo 尝试使用国内镜像源安装...
        pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/
        if errorlevel 1 (
            echo 错误：PyInstaller安装失败，请检查网络连接
            pause
            exit /b 1
        )
    )
)

rem 检查依赖是否安装
echo 检查项目依赖...
if exist requirements.txt (
    echo 正在安装依赖包...
    pip install -r requirements.txt --upgrade
    if errorlevel 1 (
        echo 警告：依赖包安装失败，尝试使用国内镜像源...
        pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
        if errorlevel 1 (
            echo 警告：依赖包安装失败，尝试继续打包...
        )
    )
)

rem 设置输出目录
set BUILD_DIR=dist
set OUTPUT_NAME=CodeIdea

rem 清理之前的构建
echo 清理之前的构建文件...
if exist %BUILD_DIR% (
    rmdir /s /q %BUILD_DIR% 2>nul
)

if exist build (
    rmdir /s /q build 2>nul
)

rem 创建构建目录
if not exist %BUILD_DIR% mkdir %BUILD_DIR%

echo.
echo 开始打包CodeIdea...
echo 打包选项：
echo   - 单文件模式：是
echo   - 无控制台窗口：是
echo   - 自定义图标：ide.ico（根目录）
echo   - 包含资源文件：resources, language, src
echo   - 优化级别：--optimize 1
echo.

rem 创建spec文件用于自定义打包
(
echo # -*- mode: python ; coding: utf-8 -*-
echo.
echo block_cipher = None
echo.
echo a = Analysis(
echo     ['main.py'],
echo     pathex=['.'],
echo     binaries=[],
echo     datas=[
echo         ('resources', 'resources')
echo     ],
echo     hiddenimports=[
echo         'PyQt5.QtWidgets',
echo         'PyQt5.QtCore',
echo         'PyQt5.QtGui',
echo         'src.main_window',
echo         'src.workspace',
echo         'src.file_explorer',
echo         'src.left_sidebar',
echo         'src.menu_bar',
echo         'src.status_bar',
echo         'src.terminal',
echo         'src.right_panel',
echo         'src.theme_manager',
echo         'language.python_highlighter'
echo     ],
echo     hookspath=[],
echo     runtime_hooks=[],
echo     excludes=[],
echo     win_no_prefer_redirects=False,
echo     win_private_assemblies=False,
echo     cipher=block_cipher,
echo     noarchive=False
echo )
echo.
echo pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
echo.
echo exe = EXE(
echo     pyz,
echo     a.scripts,
echo     [],
echo     exclude_binaries=True,
echo     name='%OUTPUT_NAME%',
echo     debug=False,
echo     bootloader_ignore_signals=False,
echo     strip=False,
echo     upx=True,
echo     console=False,
echo     icon='ide.ico'
echo )
echo.
echo coll = COLLECT(
echo     exe,
echo     a.binaries,
echo     a.zipfiles,
echo     a.datas,
echo     strip=False,
echo     upx=True,
echo     name='%OUTPUT_NAME%'
echo )
) > codeidea.spec

rem 检查PyQt5是否安装
python -c "import PyQt5" 2>nul
if errorlevel 1 (
    echo 正在安装PyQt5...
    pip install PyQt5 pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
    if errorlevel 1 (
        echo 错误：PyQt5安装失败，请检查网络连接
        pause
        exit /b 1
    )
)

rem 使用spec文件进行打包（更稳定）
pyinstaller codeidea.spec --clean

if errorlevel 1 (
    echo.
    echo 警告：使用spec文件打包失败，尝试直接打包...
    
    rem 尝试直接打包（改进的PyQt5支持）
    pyinstaller ^
        --name=%OUTPUT_NAME% ^
        --onedir ^
        --windowed ^
        --icon=ide.ico ^
        --add-data="resources;resources" ^
        --hidden-import=PyQt5 ^
        --hidden-import=PyQt5.QtWidgets ^
        --hidden-import=PyQt5.QtCore ^
        --hidden-import=PyQt5.QtGui ^
        --hidden-import=PyQt5.Qt ^
        --hidden-import=src.main_window ^
        --hidden-import=src.workspace ^
        --hidden-import=src.file_explorer ^
        --hidden-import=src.left_sidebar ^
        --hidden-import=src.menu_bar ^
        --hidden-import=src.status_bar ^
        --hidden-import=src.terminal ^
        --hidden-import=src.right_panel ^
        --hidden-import=src.theme_manager ^
        --hidden-import=language.python_highlighter ^
        --optimize 1 ^
        --clean ^
        main.py
    
    if errorlevel 1 (
        echo 错误：打包失败！
        echo 请检查以下可能的问题：
        echo 1. Python版本是否兼容
        echo 2. 依赖包是否正确安装
        echo 3. 资源文件路径是否正确
        pause
        exit /b 1
    )
)

rem 清理临时文件
if exist codeidea.spec del codeidea.spec

rem 检查生成的可执行文件
if exist %BUILD_DIR%\%OUTPUT_NAME%.exe (
    rem 获取文件大小
    for %%F in (%BUILD_DIR%\%OUTPUT_NAME%.exe) do set FILE_SIZE=%%~zF
    set /a FILE_SIZE_MB=!FILE_SIZE!/1048576
    
    echo.
    echo =============================================
    echo     打包成功完成！
    echo =============================================
    echo.
    echo 生成的可执行文件：dist\%OUTPUT_NAME%.exe
    echo 文件大小：!FILE_SIZE_MB! MB
    echo.
    echo 打包信息：
    echo    - 单文件模式：是
    echo    - 无控制台窗口：是
    echo    - 自定义图标：resources\icons\ide.ico
    echo    - 包含资源文件：resources, language, src
    echo    - 优化级别：--optimize 1
    echo.
    
    rem 测试运行（可选）
    echo 是否测试运行程序？(y/n)
    set /p TEST_RUN=
    if /i "!TEST_RUN!"=="y" (
        echo.
        echo 启动测试运行（5秒后启动）...
        timeout /t 5 /nobreak >nul
        echo 正在启动CodeIdea...
        start "" "dist\%OUTPUT_NAME%.exe"
        echo 程序已启动！
    )
    
    echo.
    echo 打包完成！
    echo 输出文件：dist\%OUTPUT_NAME%.exe
    echo.
    
) else (
    echo 错误：可执行文件生成失败！
    pause
    exit /b 1
)

echo.
pause